package main

import (
	"fmt"
	"runtime"
)

type ConnMemStat struct {
	Alloc uint64
	TotalAlloc uint64
	Sys uint64
	Mallocs uint64
	Frees uint64
	NumGoroutine int
	PauseTotalNs uint64
	NumGC uint32
}

/*
Alloc -当前在堆中分配字节数，
TotalAlloc -在堆中累计分配最大字节数（不会减少），
Sys -从系统获得的总内存，
Mallocs 和 Frees - 分配，释放和存活对象数（mallocs - frees），
PauseTotalNs -从应用开始总GC暂停，
NumGC - GC 循环完成数
 */

// 程序內存使用率
func ProcMemInfo() {
	var rtm runtime.MemStats
	runtime.ReadMemStats(&rtm)

	m := ConnMemStat{}

	// Number of goroutines
	m.NumGoroutine = runtime.NumGoroutine()

	// Misc memory stats
	m.Alloc = rtm.Alloc
	m.TotalAlloc = rtm.TotalAlloc
	m.Sys = rtm.Sys
	m.Mallocs = rtm.Mallocs
	m.Frees = rtm.Frees


	// GC Stats
	m.PauseTotalNs = rtm.PauseTotalNs
	m.NumGC = rtm.NumGC
}

func main() {
	fmt.Println(runtime.GOOS, runtime.GOARCH)

	ProcMemInfo()
}